package com.yxy.mapper;

import com.yxy.domain.dto.SportListDTO;
import com.yxy.domain.po.MetricType;
import com.yxy.domain.po.SportList;
import com.yxy.domain.po.Sports;
import com.yxy.domain.po.SportsType;
import com.yxy.domain.vo.SportAllVO;
import com.yxy.domain.vo.SportListVo;
import com.yxy.domain.vo.SportVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface SportMapper {
    /**
     * 获取运动类型
     * @return
     */
    @Select("select * from sports_type")
    List<SportsType> getSportType();

    /**
     * 根据用户id和当前日期获取运动
     * @param id
     * @param localDate
     * @return
     */
    @Select("select * from sports where user_id = #{id} and create_time = #{localDate}")
    Sports getSportByIdAndCreateTime(Integer id, LocalDate localDate);

    /**
     *  插入运动
     * @param build
     */
    void insert(Sports build);

    /**
     * 根据运动id获取运动列表
     * @param id
     * @return
     */
    @Select("select * from sports_list where sports_id = #{id}")
    List<SportList> selectSportListBySportId(Integer id);

    /**
     * 根据运动类型id获取运动类型
     * @param sportsTypeId
     * @return
     */
    @Select("select * from metric_type where id = #{metricTypeid}")
    MetricType getMetricTypeByid(Integer metricTypeId);

    /**
     * 更新运动
     * @param sports
     */
    void update(Sports sports);

    /**
     * 根据运动类型id获取运动列表
     * @param sportsTypeId
     * @return
     */
    @Select("select * from sports_list where sports_id = #{sportId} and sports_type_id = #{sportsTypeId}")
    SportList getSportListBSportIdAndSportTypeId(Integer sportId, Integer sportsTypeId);

    /**
     * 插入运动列表
     * @param sportList
     */
    void insertSportList(SportList sportList);

    /**
     * 更新运动列表
     * @param sportList
     */
    void updateSportList(SportList sportList);

    /**
     * 根据用户id和日期获取运动列表
     * @param id
     * @param signDate
     * @return
     */
    @Select("select * from sports where user_id = #{id} and create_time = #{signDate}")
    List<Sports> selectDurationByUserIdAndSignDate(Integer id, LocalDate signDate);

    /**
     * 查询所有运动
     * @return
     */
    @Select("select sports.id, user_id, hours, minutes, seconds, nickname from sports left join user on sports.user_id = user.id")
    List<SportAllVO> selectAll();

    /**
     * 根据用户id和当前日期获取运动
     * @param userId
     * @param now
     * @return
     */
    @Select("select * from sports where user_id = #{userId} and create_time = #{now}")
    Sports getByUserIdAndCurrentDate(int userId, LocalDate now);

    /**
     * 根据用户id批量删除运动
     * @param ids
     */
    void deleteByUserIds(List<Integer> ids);

    /**
     * 根据用户id批量查询运动id
     * @param ids
     * @return
     */
    List<Integer> selectIdsByUserIds(List<Integer> ids);

    /**
     * 根据运动id批量删除运动列表信息
     * @param sportIds
     */
    void deleteSportListBySportIds(List<Integer> sportIds);
}
